
/**********************************************************************************\
** 文件名称: beep.h
** 创建人员: YCG
** 创建日期: 2018-12-14
** 文档描述: 
** 版本代号: V0.1
** 版本说明: 初始版本
\********************************************************************************/
#ifndef __BEEP_H_
#define __BEEP_H_
#include "main.h"

//#define BEEP_DEBUG

#ifdef  BEEP_DEBUG
#include "uart.h"
#define  BEEP_Printf(fmt,...)   Uprintf(fmt,__VA_ARGS__)
#else
#define  BEEP_Printf(...)
#endif

#define BEEP_TIME TIM14 

#define BEEP_Prescaler 3   //4分频
#define BEEP_Fre (48000000/(BEEP_Prescaler+1))   //定时器的计数频率
#define BEEP_GET_FRE_COUNT(fre) (BEEP_Fre/2/fre)     //获取频率对应的计数值

#define BEEP_ClOSE  0
#define BEEP_PLAY   1

#define BEEP_ONCE   0
#define BEEP_CYCLE  1

//七音阶对应的频率
#define NOTE_1 523
#define NOTE_2 587
#define NOTE_3 659
#define NOTE_4 698
#define NOTE_5 392
#define NOTE_6 440
#define NOTE_7 494

#define NOTE_1_L 262
#define NOTE_2_L 294
#define NOTE_3_L 330
#define NOTE_4_L 349
#define NOTE_5_L 392
#define NOTE_6_L 440
#define NOTE_7_L 494

#define NOTE_1_M 523
#define NOTE_2_M 587
#define NOTE_3_M 659
#define NOTE_4_M 698
#define NOTE_5_M 784
#define NOTE_6_M 880
#define NOTE_7_M 988

#define NOTE_1_H 1046
#define NOTE_2_H 1175
#define NOTE_3_H 1318
#define NOTE_4_H 1397
#define NOTE_5_H 1568
#define NOTE_6_H 1760
#define NOTE_7_H 1975

#define BEEP_D1 0
#define BEEP_D2 1
#define BEEP_D3 2
#define BEEP_B1 3
#define BEEP_B2 4
#define BEEP_B3 5

#define BEEP_BIR 6
#define BEEP_TIG 7


#define L(note) (note)
#define M(note) (note+7)
#define H(note) (note+14)
typedef struct{
  uint16_t note;      //音符
	uint16_t  time;     //时间
}Staff_t;

typedef struct{
	uint8_t Mode;            //播放的模式
  uint8_t PlayNum;           //当前播放的序号
  uint16_t MaxNum;            //曲谱的最大数量
	uint32_t NextTime;          //记录上一次改变的延时用来计算时间
	const Staff_t * Staff;     //播放乐谱的指针
}Beep_t;

void BeepPlay(uint16_t num);
void BeepInit(void);
void Beep_IRQHandler(void);
void BeepScan(uint32_t time);
void BeepClose(void) ;

#endif

/********************************End of File************************************/

